package com.losalpes.persistence.entity;

import java.io.Serializable;
import java.sql.Date;
import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;

/**
 * Clase que maneja los atributos de mueble
 * @author CSI
 */
@Entity
public class Mueble implements Cloneable, Serializable {

    private long id;
    private String referencia;
    private String nombre;
    private String descripcion;
    private TipoMueble tipo;
    private String material;
    private double alto;
    private double ancho;
    private double profundidad;
    private String color;
    private double peso;
    private byte[] foto;
    private int cantidad;
    private long precio;
    private Date fechaInicioPromocion;
    private Date fechaFinPromocion;
    private String descripcionPromocion;

    /**
     *  Constructor de la clase
     */
    public Mueble() {
    }

    /**
     * Obtiene el identificador del mueble
     * @return
     */
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public long getId() {
        return id;
    }

    /**
     * Obtiene el identificador del cliente
     * @return
     */
    public void setId(long id) {
        this.id = id;
    }

    /**
     * obtiene el alto del mueble
     * @return
     */
    public double getAlto() {
        return alto;
    }

    /**
     * establece el alto del mueble
     * @param alto
     */
    public void setAlto(double alto) {
        this.alto = alto;
    }

    /**
     * obtiene el ancho del mueble
     * @return
     */
    public double getAncho() {
        return ancho;
    }

    /**
     * establece el ancho del mueble
     * @param ancho
     */
    public void setAncho(double ancho) {
        this.ancho = ancho;
    }

    /**
     * obtiene el color del mueble
     * @return
     */
    public String getColor() {
        return color;
    }

    /**
     * Establece el color del mueble
     * @param color
     */
    public void setColor(String color) {
        this.color = color;
    }

    /**
     * Obtiene la descripcion del mueble
     * @return
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * Establece la descripcion del mueble
     * @param descripcion
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    /**
     * Obtiene el material del mueble
     * @return
     */
    public String getMaterial() {
        return material;
    }

    /**
     * Establece el material del mueble
     * @param material
     */
    public void setMaterial(String material) {
        this.material = material;
    }

    /**
     * Obtiene l nombre del mueble
     * @return
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Establece el nombre del mueble
     * @param nombre
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * Obtiene el peso del mueble
     * @return
     */
    public double getPeso() {
        return peso;
    }

    /**
     * Establece el peso del mueble
     * @param peso
     */
    public void setPeso(double peso) {
        this.peso = peso;
    }

    /**
     * Obtiene la profundidad del mueble
     * @return
     */
    public double getProfundidad() {
        return profundidad;
    }

    /**
     * Establece la profundidad del mueble
     * @param profundidad
     */
    public void setProfundidad(double profundidad) {
        this.profundidad = profundidad;
    }

    /**
     * Obtiene la referencia del mueble
     * @return
     */
    public String getReferencia() {
        return referencia;
    }

    /**
     * Establece la referencia del mueble
     * @param referencia
     */
    public void setReferencia(String referencia) {
        this.referencia = referencia;
    }

    /**
     * Obtiene el tipo de mueble
     * @return
     */
    public TipoMueble getTipo() {
        return tipo;
    }

    /**
     * Establece el tipo de mueble
     * @param tipo
     */
    public void setTipo(TipoMueble tipo) {
        this.tipo = tipo;
    }

    /**
     * Obtiene la cantidad en inventario del mueble
     * @return
     */
    public int getCantidad() {
        return cantidad;
    }

    /**
     * Establece la cantidad en inventario del mueble
     * @param cantidad
     */
    public void setCantidad(int cantidad) {
        this.cantidad = cantidad;
    }

    /**
     * Obtiene la foto del mueble
     * @return
     */
    @Basic(fetch = FetchType.LAZY)
    @Lob
    public byte[] getFoto() {
        return foto;
    }

    /**
     * Establece la foto del mueble
     * @param foto
     */
    public void setFoto(byte[] foto) {
        this.foto = foto;
    }

    /**
     * Obtiene el precio del mueble
     * @return
     */
    public long getPrecio() {
        return precio;
    }

    /**
     * Establece el precio del mueble
     * @param precio
     */
    public void setPrecio(long precio) {
        this.precio = precio;
    }

    /**
     * Realiza una clonacion del mueble para evitar que se modifique directamente
     * la version real
     * @return
     */
    public Mueble Clone() {
        try {
            return (Mueble) this.clone();
        } catch (Exception ex) {
        }
        return null;
    }

    /**
     * Obtiene la descripcion de la promocion asociada al mueble
     * @return
     */
    public String getDescripcionPromocion() {
        return descripcionPromocion;
    }

    /**
     * establece la descripcion de la promocion asociada al mueble
     * @param descripcionPromocion
     */
    public void setDescripcionPromocion(String descripcionPromocion) {
        this.descripcionPromocion = descripcionPromocion;
    }

    /**
     * Obtiene la echa final de la promocion asociada al mueble
     * @return
     */
    public Date getFechaFinPromocion() {
        return fechaFinPromocion;
    }

    /**
     * Establece la descripcion de la promocion asociada al mueble
     * @param fechaFinPromocion
     */
    public void setFechaFinPromocion(Date fechaFinPromocion) {
        this.fechaFinPromocion = fechaFinPromocion;
    }

    /**
     * Obtiene la fecha inicial de la promocion asociada al mueble
     * @return
     */
    public Date getFechaInicioPromocion() {
        return fechaInicioPromocion;
    }

    /**
     * Establece la fecha inicial de la promocion asociada al mueble
     * @param fechaInicioPromocion
     */
    public void setFechaInicioPromocion(Date fechaInicioPromocion) {
        this.fechaInicioPromocion = fechaInicioPromocion;
    }
}
